package com.xs.langchain4j_springboot.config;

import com.xs.langchain4j_springboot.service.ToolService;
import dev.langchain4j.agent.tool.Tool;
import dev.langchain4j.community.model.dashscope.QwenEmbeddingModel;
import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.rag.content.retriever.ContentRetriever;
import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.TokenStream;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.store.embedding.EmbeddingStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.Transactional;

@Configuration
public class PdfAuditAgent {
    public interface auditAgent {
        @SystemMessage("""
        你是一个pdf文件审核智能助手，我会告知你需要审核的pdf的内容，你需要找到pdf文档的第14部分（运输信息相关的内容），
        如果这一部分的内容没有包含任何以下格式的信息：“UN开头并且在后跟随一串数字”，则认为该pdf文件通过审核，否则认定为不通过。
        如果你认为无法判断，则直接回答无法判断。
        """)
        TokenStream pdfAudit(@UserMessage String pdfUrl);
    }

    @Bean
    public PdfAuditAgent.auditAgent auditAgent(ChatLanguageModel qwenChatModel, StreamingChatLanguageModel qwenStreamingChatModel) {
//        ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10);
//        ContentRetriever contentRetriever = EmbeddingStoreContentRetriever
//                .builder()
//                .embeddingStore(embeddingStore)
//                .embeddingModel(qwenEmbeddingModel)
//                .maxResults(6)
//                .minScore(0.6)
//                .build();
        PdfAuditAgent.auditAgent auditAgent = AiServices.builder(PdfAuditAgent.auditAgent.class)
//                .tools(toolService)
                .chatLanguageModel(qwenChatModel)
                .streamingChatLanguageModel(qwenStreamingChatModel)
//                .chatMemory(chatMemory)
//                .contentRetriever(contentRetriever)
                .build();
        return auditAgent;
    }

}
